package com.yinquan.util;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.time.LocalTime;
import java.util.Date;
import java.util.TimeZone;
import java.util.concurrent.ThreadLocalRandom;

public class DataUtil {

    // 指向自己实例的私有静态引用，主动创建
    private static DataUtil dataUtil;

    // 私有的构造方法
    private DataUtil() {
    }

    // 以自己实例为返回值的静态的公有方法，静态工厂方法
    public static DataUtil getSingleton() {
        // 被动创建，在真正需要使用时才去创建
        if (dataUtil == null) {
            dataUtil = new DataUtil();
        }
        return dataUtil;
    }

    /**
     * 无参返回当前系统时间
     *
     * @return
     */
    public static String currTime() {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String currTime = df.format(new Date());
        return currTime;
    }

    /**
     * 无参返回今天零点时间
     *
     * @return
     */
    public static String todayZero() {
        long current = System.currentTimeMillis();// 当前时间毫秒数
        long zero = current / (1000 * 3600 * 24) * (1000 * 3600 * 24) - TimeZone.getDefault().getRawOffset();// 今天零点零分零秒的毫秒数
        String a = new Timestamp(zero).toString();
        a = a.substring(0, a.indexOf("."));
        return a;
    }

    /**
     * 无参返回今天日期
     *
     * @return
     */
    public static String currDate() {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        String currTime = df.format(new Date());
        return currTime;
    }

    /**
     * 时间戳转换为自定义格式时间
     *
     * @param dateFormat
     * @param millSec
     * @return
     */
    public static String transferLongToDate(String dateFormat, Long millSec) {
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        Date date = new Date(millSec);
        return sdf.format(date);
    }

    /**
     * 这个类偏业务类 获取当前时间String类型，格式为：yyyy-MM-dd HH:mm:ss
     *
     * @return
     */
    public static String GetCurrDateStr() {
        long currDateMill = new Date().getTime();
        return transferLongToDate("yyyy-MM-dd HH:mm:ss", currDateMill);
    }

    /**
     * 这个类偏业务类 获取3分钟前的那个时间String类型，格式为：yyyy-MM-dd HH:mm:ss
     *
     * @return
     */
    public static String GetTodayAfterDateStr() {
        long currDateMill = new Date().getTime();
        currDateMill -= 1 * 300 * 1000;
        return transferLongToDate("yyyy-MM-dd HH:mm:ss", currDateMill);
    }

    public static String getScopeRandomTime(Integer startHour, Integer startMinute, Integer startSecond,
                                            Integer endHour, Integer endMinute, Integer endSecond) {

        LocalTime startTime = LocalTime.of(startHour, startMinute, startSecond);
        LocalTime endTime = LocalTime.of(endHour, endMinute, endSecond);

        // 生成随机时间
        int startSeconds = startTime.toSecondOfDay();
        int endSeconds = endTime.toSecondOfDay();
        int randomSeconds = ThreadLocalRandom.current().nextInt(startSeconds, endSeconds);

        return LocalTime.ofSecondOfDay(randomSeconds).toString();
    }

}
